查看原文
其他

记一次渗透中的Password加密爆破过程

听风安全 2023-11-28

The following article is from 弱口令安全实验室 Author rax

免责声明
由于传播、利用本公众号听风安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号听风安全及作者不为承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!

公众号现在只对常读和星标的公众号才展示大图推送,

建议大家把听风安全设为星标,否则可能就看不到啦!

----------------------------------------------------------------------

这是在红队行动中遇到的一个网站。网站前端对登录密码进行了加密,由于加密方式不是常见的MD5,无法直接使用Burp的普通爆破模式进行破解。下面是这个网站的渗透过程,与师傅们分享一下。

找到目标后台

首先用burp进行一下抓包测试,看看有没有什么突破点,登录口令随便输一个123456

发现密码在输入后被加密,返回前端页面,发现密码变成了长串

用F5刷新一下页面看看,可以看到输入密码后加载了一个MD5的js文件

由此我们猜测该密码加密方式为MD5,我们将密码拿去进行MD5解密,发现解密不成功

有点奇怪,去看下登录代码,定位找到登录键代码,可以看到CheckLogin函数,搜索一下


登陆代码的前两段代码就是对用户的输入内容做一个校验,我们不用去看,重要的信息在第三段,我们需要注意的有两点:

第一点是getTime函数的作用,getTime函数作用为检查完password不为空后被调用,生成当前时间戳,然后赋值给randid函数

第二点是这段代码的加密方法,先获取Password的值,然后使用 hex_md5 函数对密码进行两次 MD5 加密。先将password直接进行MD5加密,然后将生成的randid 与加密后的密码拼接在一起,并再次使用 hex_md5 函数对拼接后的字符串进行加密。最后,将加密后的密码赋值给名为 "Password" 的元素的值。

总结来说,这段代码一共对password做了两次MD5加密,第一次是直接将password进行加密,第二次则是将password和时间戳拼接在一起进行加密

那我们该如何解决呢?我们通过看下面这两句代码可以得知randid函数是通过SecretCode来设置的,我们在POST包中也可以看到SecretCode这个时间戳。我们可以将他的时间戳进行固定(时间戳固定为任意一个即可),让我们的密码算法不变

打开公司内部自用的ChatGPT来编写脚本

import hashlib

# 打开文件
with open("pass.txt", "r") as input_file, open("output.txt", "w") as output_file:
    # 逐行读取文件内容
    for line in input_file:
        # 去除行末的换行符
        line = line.rstrip('\n')
        # 计算 MD5 值
        md5_value = hashlib.md5(line.encode()).hexdigest()
        # 将结果写入输出文件
        output_file.write(md5_value + '\n')

with open("output.txt", "r") as input_file, open("output1.txt", "w") as output_file:
    # 逐行读取文件内容
    for line in input_file:
        # 去除行末的换行符
        line = line.rstrip('\n')
        # 添加固定内容
        line += "1687874232438"
        # 将结果写入输出文件
        output_file.write(line + '\n')

# 打开文件
with open("output1.txt", "r") as input_file, open("output2.txt", "w") as output_file:
    # 逐行读取文件内容
    for line in input_file:
        # 去除行末的换行符
        line = line.rstrip('\n')
        # 计算 MD5 值
        md5_value = hashlib.md5(line.encode()).hexdigest()
        # 将结果写入输出文件
        output_file.write(md5_value + '\n')

然后创建pass.txt文档和output.txt,运行脚本,得到加密后的字典


将加密好的字典拿去进行爆破


爆破成功,成功进入后台



不可错过的往期推荐哦


【蓝队篇】jsp型webshell被删情况下如何溯源攻击时间

再捉“隔壁小王”

达梦数据库手工注入笔记

记一次源码泄露引发的惨案

某运营商外网打点到内网横向渗透的全过程

从外网绕过沙箱逃逸再到内网权限提升的一次常规渗透项目

一次市hvv及省hvv的思路总结

带防护的Windows域渗透

渗透实战|NPS反制之绕过登陆验证

干货|从无到有学习Golang编写poc&exp

点击下方名片,关注我们

觉得内容不错,就点下“”和“在看

如果不想错过新的内容推送可以设为星标
继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存